package leetcode.hot100;

@SuppressWarnings("all")
public class _198_打家劫舍 {

    // 两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警
    // 给定一个代表每个房屋存放金额的非负整数数组，计算在不触动警报装置的情况下，一夜之内能够偷窃到的最高金额
    public int rob(int[] nums) {
        // 只有一家人或者两家人的情况很容易得出答案
        if (nums.length == 1) return nums[0];
        if (nums.length == 2) return Math.max(nums[0], nums[1]);
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        dp[1] = Math.max(nums[0], nums[1]);
        for (int i = 2; i < nums.length; i++) {
            // 偷第i户人家就可以偷第i-2户人家
            // 但是不一定会有只偷第i-i户人家得到的利润多，这需要比较
            dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
        }
        return dp[nums.length - 1];
    }
}
